<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    <title>Document</title>
    <!-- CSS only -->
    <link
            rel="stylesheet"
            href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css"
    />
    <style>
        .red {
            color: red !important;
        }

        .my-form {
            display: flex;
            margin: 20px 0;
        }

        .my-form input {
            flex: 1;
            margin-right: 20px;
        }

        .table > :not(:first-child) {
            border-top: none;
        }

        .contain {
            display: flex;
            padding: 10px;
        }

        .list-box {
            flex: 1;
            padding: 0 30px;
        }

        .list-box a {
            text-decoration: none;
        }

        .echarts-box {
            width: 600px;
            height: 400px;
            padding: 30px;
            margin: 0 auto;
            border: 1px solid #ccc;
        }

        tfoot {
            font-weight: bold;
        }

        @media screen and (max-width: 1000px) {
            .contain {
                flex-wrap: wrap;
            }

            .list-box {
                width: 100%;
            }

            .echarts-box {
                margin-top: 30px;
            }
        }
    </style>
</head>
<body>
    <div id="app">
        <div class="contain">
            <!-- 左侧列表 -->
            <div class="list-box">

                <!-- 添加资产 -->
                <form class="my-form">
                    <input type="text" class="form-control" placeholder="消费名称" v-model.trim="name"/>
                    <input type="text" class="form-control" placeholder="消费价格" v-model.trim.number="price"/>
                    <button type="button" class="btn btn-primary" @click="add">添加账单</button>
                </form>

                <table class="table table-hover">
                    <thead>
                    <tr>
                        <th>编号</th>
                        <th>消费名称</th>
                        <th>消费价格</th>
                        <th>操作</th>
                    </tr>
                    </thead>
                    <tbody>
                        <tr v-for="(item,index) in list" :key="item.id">
                            <td>{{ index + 1 }}</td>
                            <td>{{ item.name }}</td>
                            <td :class="{red: item.price > 500}">￥{{ item.price.toFixed(2) }} 元</td>
                            <td><a href="javascript:;" @click="del(item.id)">删除</a></td>
                        </tr>
                    </tbody>
                    <tfoot>
                    <tr>
                        <td colspan="4">消费总计： ￥{{ totalPrice }} 元</td>
                    </tr>
                    </tfoot>
                </table>
            </div>

            <!-- 右侧图表 -->
            <div class="echarts-box" id="main"></div>
        </div>
    </div>
    <script src="../utils/echarts.min.js"></script>
    <script src="../utils/vue.js"></script>
    <script src="../utils/axios.min.js"></script>
    <script>
        /**
         * 接口文档地址：
         * https://www.apifox.cn/apidoc/shared-24459455-ebb1-4fdc-8df8-0aff8dc317a8/api-53371058
         *
         * 功能需求：
         * 1. 基本渲染
         * 2. 添加功能
         * 3. 删除功能
         * 4. 饼图渲染
         */
        const app = new Vue({
            el: '#app',
            data: {
                list: [],
                name: '',
                price: ''
            },
            methods: {
                // 获取数据列表
                async getList() {
                    const result = await axios.get('https://applet-base-api-t.itheima.net/bill', {
                        params: {
                            creator: '柠澈'
                        }
                    })
                    this.list = result.data.data
                    this.myEcharts.setOption({
                        series: [
                            {
                                name:'消费账单',
                                type: 'pie',
                                radius: '50%',
                                data: this.list.map(item => ({ name: item.name, value: item.price }))
                            }
                        ]
                    })
                },

                // 添加数据
                async add() {
                    if (!this.name) {
                        alert('请输入消费名称')
                        return
                    }
                    if (typeof this.price !== 'number') {
                        alert('请输入正确的消费价格')
                        return
                    }
                    const result = await axios.post('https://applet-base-api-t.itheima.net/bill', {
                        creator: '柠澈',
                        name: this.name,
                        price: this.price
                    })
                    await this.getList()
                    this.name = ''
                    this.price = ''
                },

                // 删除数据
                async del(id) {
                    const result = await axios.delete(`https://applet-base-api-t.itheima.net/bill/${ id }`)
                    await this.getList()
                }
            },
            computed: {
                totalPrice() {
                    return this.list.reduce((sum, item) => sum + item.price, 0).toFixed(2)
                }
            },
            created() {
                this.getList()
            },
            mounted() {
                // echarts 饼图
                this.myEcharts = echarts.init(document.querySelector('#main'))
                const option = {
                    title: {
                        text: '消费账单列表'
                    },
                    // 提示框
                    tooltip:{
                      trigger:'item'
                    },
                    // 图例
                    legend: {
                        orient: 'vertical',
                        left: 10,
                        top: 'center'
                    },
                    series: [
                        {
                            name:'消费账单',
                            type: 'pie',
                            radius: '50%',
                            data: this.list.map(item => ({ name: item.name, value: item.price }))
                        }
                    ]
                }
                this.myEcharts.setOption(option)
            }
        })
    </script>
</body>
</html>
